/*
2021-7-23
https://www.acwing.com/problem/content/1071/
*/
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;
typedef long long ll;
const int N=55,M=35;
ll f[N][N][M],w[N];
int n;

void add(ll a[],ll b[])
{
    static ll c[M];
    memset(c,0,sizeof c);
    ll t=0;
    for(int i=0;i<M-1;i++)
    {
        t+=a[i]+b[i];
        c[i]=t%10;
        t/=10;
    }
    memcpy(a,c,sizeof c);
}

void mul(ll a[],ll b)
{
    static ll c[M];
    memset(c,0,sizeof c);
    ll t=0;
    for(int i=0;i<M-1;i++)
    {
        t+=a[i]*b;
        c[i]=t%10;
        t/=10;
    }
    memcpy(a,c,sizeof c);
}

int cmp(ll a[],ll b[])
{
    for(int i=M-1;i>=0;i--)
    {
        if(a[i]>b[i]) return 1;
        else if(a[i]<b[i]) return -1;
    }
    return 0;
}

void print(ll a[])
{
    int k=M-1;
    while(k && !a[k]) k--;
    while(k>=0) cout<<a[k--];
    cout<<endl;
}

int main()
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>w[i];
    
    ll temp[M];
    
    for(int len=3;len<=n;len++)
        for(int l=1;l+len-1<=n;l++)
        {
            int r=l+len-1;
            f[l][r][M-1]=1;
            for(int k=l+1;k<r;k++)
            {
                memset(temp,0,sizeof temp);
                temp[0]=w[l];
                mul(temp,w[k]);
                mul(temp,w[r]);
                add(temp,f[l][k]);
                add(temp,f[k][r]);
                if(cmp(f[l][r],temp)>0)
                    memcpy(f[l][r],temp,sizeof temp);
            }
        }
    
    print(f[1][n]);
    
    return 0;
}

